package org.eddycar.jproyeddycar.negocio;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class CargarReportes {

    static String driver = "org.postgresql.Driver";
    static Connection conexion = null;

    public static Connection getConexion() {
        try {
            Class.forName(driver);
            conexion = DriverManager.getConnection("jdbc:postgresql://localhost:5433/jproyeddycarDB", "postgres", "postgres");
        } catch (Exception ex) {
            System.out.println("No se pudo establecer la conexion: " + ex);
            conexion = null;
        }
        return conexion;
    }

    public static void close() {
        try {
            conexion.close();
        } catch (SQLException ex) {
            System.out.println("No se pudo cerrar la conexion: " + ex);
        }
    }

    public void llamarReporte(String clave, String reporte, String parametro) {
        try {
            Map params = new HashMap();
            params.put(parametro, clave);
            if (System.getProperty("user.dir").toString().substring(0, 6).equals("/home/")) {
                JasperPrint print = JasperFillManager.fillReport("/home/" + System.getProperty("user.name") + "/dist/Reportes/" + reporte + ".jasper", params, this.getConexion());
                JasperViewer viewer = new JasperViewer(print, false);
                viewer.setTitle(reporte);
                viewer.setVisible(true);
                viewer.setAlwaysOnTop(true);
                JasperExportManager.exportReportToPdfFile(print, "/home/" + System.getProperty("user.name") + "/RespaldoC/" + clave + "-" + reporte + "-" + (new Date().getMonth() + 1) + "-" + (new Date().getYear() + 1900) + ".pdf");
            } else {
                JasperPrint print = JasperFillManager.fillReport("D:\\dist\\Reportes\\" + reporte + ".jasper", params, this.getConexion());
                JasperViewer viewer = new JasperViewer(print, false);
                viewer.setTitle(reporte);
                viewer.setVisible(true);
                viewer.setAlwaysOnTop(true);
                JasperExportManager.exportReportToPdfFile(print, "D:\\RespaldoC\\" + clave + "-" + reporte + "-" + (new Date().getMonth() + 1) + "-" + (new Date().getYear() + 1900) + ".pdf");
            }
            close();
        } catch (NullPointerException e) {
            JOptionPane.showMessageDialog(null, "Error: fallo la autentificación para el usuario postgres");
        } catch (JRException e) {
            JOptionPane.showMessageDialog(null, "Error al generar reporte: " + e);
            e.printStackTrace();
        }
    }

    public void llamarReporte(Date fechaI, Date fechaF, String reporte) {
        try {
            Map params = new HashMap();
            params.put("fechaI", fechaI);
            params.put("fechaF", fechaF);
            JasperPrint print = null;
            if (System.getProperty("user.dir").toString().substring(0, 6).equals("/home/")) {
                print = JasperFillManager.fillReport("/home/" + System.getProperty("user.name") + "/dist/Reportes/" + reporte + ".jasper", params, getConexion());
            } else {
                print = JasperFillManager.fillReport("D:\\dist\\Reportes\\" + reporte + ".jasper", params, getConexion());
            }
            JasperViewer.viewReport(print, false);
            close();
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error al generar reporte: " + ex);
        }
    }
}
